package com.letv.whatslive.model.convert;

import com.google.common.collect.Lists;
import com.letv.whatslive.common.utils.Constants;
import com.letv.whatslive.common.utils.ObjectUtils;
import com.letv.whatslive.model.Program;
import com.letv.whatslive.model.Questionnaire;
import com.letv.whatslive.model.SubQuestionnaire;
import com.letv.whatslive.model.utils.Constant;
import com.letv.whatslive.model.utils.ObjUtils;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBRef;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Created by shenyue on 16-4-5.
 */
public class QuestionnaireConvert {


    public static DBObject castQuestionnaireToDBObject(Questionnaire questionnaire) {
        DBObject dbo = new BasicDBObject();
        if (questionnaire.getId() != null) {
            dbo.put("_id", questionnaire.getId());
        }
        if (questionnaire.getCount() != null) {
            dbo.put("count", ObjectUtils.toLong(questionnaire.getCount()));
        }
        if (questionnaire.getStatus() != null)
            dbo.put("status", ObjUtils.toInteger(questionnaire.getStatus()));
        dbo.put("name", ObjUtils.ifNull(questionnaire.getName(), ""));
        if (questionnaire.getSubQuestionnaires() != null) {
            BasicDBList basicDBList=new BasicDBList();
            for(SubQuestionnaire subQuestionnaire:questionnaire.getSubQuestionnaires()){
                basicDBList.add(SubQuestionnaireConvert.castSubQuestionnaireToDBObject(subQuestionnaire));
            }
            dbo.put("subQuestionnaires", basicDBList);
        }
        dbo.put("createTime", ObjUtils.toLong(questionnaire.getCreateTime(), System.currentTimeMillis()));
        dbo.put("updateTime", ObjUtils.toLong(questionnaire.getUpdateTime(), System.currentTimeMillis()));

        return dbo;
    }

    public static Questionnaire castDBObjectToQuestionnaire(DBObject dbObject) {
        Questionnaire questionnaire = new Questionnaire();
        if (dbObject != null) {
            questionnaire.setId(ObjUtils.toLong(dbObject.get("_id")));
            questionnaire.setName(ObjUtils.toString(dbObject.get("name")));
            questionnaire.setStatus(ObjUtils.toInteger(dbObject.get("status")));
            questionnaire.setCreateTime(ObjUtils.toLong(dbObject.get("createTime")));
            questionnaire.setUpdateTime(ObjUtils.toLong(dbObject.get("updateTime")));
            questionnaire.setCount(ObjUtils.toLong(dbObject.get("count")));
            if (dbObject.get("subQuestionnaires") != null) {
                if (dbObject.get("subQuestionnaires") instanceof BasicDBList) {
                    BasicDBList dbList = (BasicDBList) (dbObject.get("subQuestionnaires"));
                    if (dbList.size() > 0) {
                        List<SubQuestionnaire> subQuestionnaires = Lists.newLinkedList();
                        for (int i = 0; i < dbList.size(); i++) {
                            subQuestionnaires.add(SubQuestionnaireConvert.castDBObjectToSubQuestionnaire((DBObject) dbList.get(i)));
                        }
                        questionnaire.setSubQuestionnaires(subQuestionnaires);
                    }
                } else if (dbObject.get("subQuestionnaires") instanceof BasicDBObject && ((BasicDBObject) dbObject.get("subQuestionnaires")).size() > 0) {
                    List<SubQuestionnaire> subQuestionnaires = Lists.newArrayList();
                    subQuestionnaires.add(SubQuestionnaireConvert.castDBObjectToSubQuestionnaire((DBObject)dbObject.get("subQuestionnaires")));
                    questionnaire.setSubQuestionnaires(subQuestionnaires);
                }

            }
        } else {
            return null;
        }
        return questionnaire;
    }
}
